package br.com.hstar.client;

import br.com.hstar.client.quarto.QuartoLabel;

import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
/**
 * 
 * @author Fernando - Painel com todos os quartos em seus respectivos estados
 * atuais.
 *
 */
public class TelaPrincipal extends HorizontalPanel {

	//Attributes ---------------------------------------------------
	private static Grid gridPanel;
	private static TelaPrincipal instance;
	
	//Constructor --------------------------------------------------
	private TelaPrincipal() {
		createGrid();
		this.add(gridPanel);
	}
	
	public void refreshGrid() {
		this.clear();
		createGrid();
		this.add(gridPanel);
	}
	
	public static TelaPrincipal getInstance() {
		if (instance == null) {
			instance = new TelaPrincipal();
		}
		return instance;
	}
	
	
	//Methods --------------------------------------------------------
	
	/**
	 * Método que cria a tabela de quartos da tela principal
	 */
	private void createGrid() {
		//a grid deve ter no maximo 4 colunas. Para calcular o numero de linhas, deve-se pegar a quantidade total
		//de quartos e dividir por pela quantidade de colunas que no caso será "4" e adicionar mais uma linha para
		//o resto da divisão. OBS: o operando "/" pega o inteiro da divisao e o "%" pega o resto da divisao.
		int linhas = 0;
		int colunas = 4;
		
		//calcula o resto da divisao dos quartos pela qtd de colunas
		//e soma mais um, pois a divisao pode ter resto
		linhas = ( ((HSTAR.getQuartosLabelList().size()) / 4) + 1 ); 
		
		//cria a grid
		gridPanel = new Grid(linhas, colunas);
		gridPanel.setCellSpacing(10);
		
		//preenche a grid
		int li = 0, co = 0;
		for (int i = 0; i < HSTAR.getQuartosLabelList().size(); i++) {
			QuartoLabel quartoLabel = (QuartoLabel) HSTAR.getQuartosLabelList().get(i);
			
			gridPanel.setWidget(li, co, quartoLabel);
			
			if(co == 3) {
				co = 0;
				li++;
			} else {
				co++;
			}
		}
	}
	
	/**
	 * Retorna o painelzinho correspondente ao quarto.
	 */
	public QuartoLabel getQuartoLabel(Integer numero) {
		if(HSTAR.getQuartosLabelList() == null) 
			return null;
		
		QuartoLabel aux = null;
		
		for (int i = 0; i < HSTAR.getQuartosLabelList().size(); i++) {
			QuartoLabel q = (QuartoLabel)HSTAR.getQuartosLabelList().get(i);
			if(q.getQuartoUI().getNumero().equals(numero)) {
				aux = q;
				break;
			}
		}
		return aux;
	}
	
}
